/*
 * Object.h
 *
 *  Created on: 6 Nov 2012
 *      Author: Guy
 */

#ifndef OBJECT_H_
#define OBJECT_H_

#include <string>

namespace SolidityEngine{

class Object {
    int _ID;
    std::string _name;

    static int s_IDGen;

public:
    explicit Object(const std::string& name);
	explicit Object();

	virtual ~Object();

	Object* Clone(){return _Clone();};

    int& ID(){return _ID;};
    int ID() const{return _ID;};

    //serialize this
    std::string Serialize(){return _Serialize();};

	std::string& Name() {return _name;};
	std::string Name() const {return _name;};

private:
    virtual Object* _Clone()=0;
    virtual std::string _Serialize()=0;

};

} /* namespace SolidCore */
#endif /* OBJECT_H_ */
